package com.songlanyun.modules.refillorder.entity;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.songlanyun.common.drive.IntegerEnum;
import com.songlanyun.common.drive.RootEntity;
import com.songlanyun.common.enums.OrderConstant;
import com.songlanyun.common.enums.RefillOrderConstant;
import com.songlanyun.common.utils.custom.DateCustomUtils;
import com.songlanyun.common.utils.custom.MathUtils;
import lombok.Data;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.io.Serializable;

/**
 * 充值卡订单
 *
 * @author Mark
 * @email sunlightcs@gmail.com
 * @date 2020-11-16 14:26:32
 */
@Data
@TableName("yxt_sale_refill_card_order")
public class SaleRefillCardOrderEntity extends RootEntity<Long, SaleRefillCardOrderEntity> implements Serializable {
    private static final long serialVersionUID = 1L;

    /**
     *
     */
    @TableId
    private Long id;
    /**
     * 充值订单编号
     */
    private String code;
    /**
     * 交易流水号（第三方）
     */
    private String tradeNo;
    /**
     * 支付方式
     * 1：微信
     * 2：支付宝
     */
    @NotNull(message = "支付方式不能为空")
    private OrderConstant.PayMode payMode;

    /**
     * 支付状态
     * 0未支付，
     * 1支付已提交,
     * 2支付成功，但业务发生异常需要发起退款，
     * 3支付成功，但业务发生异常自动退款成功，
     * 4支付成功，但业务发生异常自动退款失败，
     * 5支付成功，但微信返回的金额与实际支付的金额不相等
     * 6支付失败，
     * 7已支付(已支付成功)
     */
    private RefillOrderConstant.PaymentStatus paymentStatus;
    /**
     * 创建的时间戳
     */
    private Long createTimeMillis;
    public void  setCreateTimeMillis(Long createTimeMillis)
    {
        this.createTimeMillis= createTimeMillis;
        this.formatCreateTimeMillis = DateCustomUtils.formatToDateTimeString(createTimeMillis);
    }

    /**
     * 格式化创建时间
     */
    @TableField(exist =  false)
    private String formatCreateTimeMillis;
    public String  getFormatCreateTimeMillis()
    {
        return DateCustomUtils.formatToDateTimeString(this.createTimeMillis);
    }
    /**
     * 支付的时间戳
     */
    private Long payTime;
    /**
     * 格式化支付时间戳
     */
    @TableField(exist =  false)
    private String formatPayTime;
    public String  getFormatPayTime()
    {
        return DateCustomUtils.formatToDateTimeString(this.payTime);
    }

    /**
     * 0未关闭，1手动关闭，2过期支付关闭
     */
    private RefillOrderConstant.CloseStatus closeStatus;
    /**
     * 过期时间
     */
    private Long expirationTime;
    /**
     * 格式化支付时间戳
     */
    @TableField(exist =  false)
    private String formatExpirationTime;
    public String  getFormatExpirationTime()
    {
        return DateCustomUtils.formatToDateTimeString(this.expirationTime);
    }

    /**
     * 交易状态（0已下单,待支付，1交易结束
     */
    private RefillOrderConstant.TransactionStatus transactionStatus;
    /**
     * 充值卡id
     */
    private Long refillCardId;
    /**
     * 充值卡名
     */
    private String refillCardName;
    /**
     * 充值卡所需钱数
     */
    private BigDecimal refillCardMoney;
    /**
     * 额外的送多少
     */
    private BigDecimal refillCardAppend;
    /**
     * 实际支付
     */
    private BigDecimal factCost;

    /**
     * 充值金额
     */
    public BigDecimal getRefillMoney(){
        return MathUtils.add(this.getRefillCardMoney(),this.getRefillCardAppend());
    }

    /**
     * 会员id
     */
    private Long userId;


    /**
     * 聚合支付订单号
     */
    @NotBlank(message = "聚合支付订单号不能为空")
    private String payOrderCode;

    /**
     * 聚合支付订单id
     */
    @NotNull(message = "聚合支付订单id不能为空")
    private Long payOrderId;

    /**
     * 手机号
     */
    @TableField(exist =  false)
    private String mobile;

    /**
     * 昵称
     */
    @TableField(exist =  false)
    private String nickname;


    @Override
    public Long getIdentity() {
        return id;
    }


}
